package com.bosssoft.hr.train.j2se.file;/*
 * @Auther:hantianbing
 * @Date:2022/12/3
 * @Description:这是七牛云Oss的传输文件的接口
 */

import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.junit.jupiter.api.Test;

import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

/**
 * @ClassName OssFileUitls
 * @Description 导入七牛云Oss依赖， 类似的云端存储有很多公司都在做
 *              七牛云Oss传输图片的接口， 只要填写相关的信息， 就可以实现图片上传
 *              大部分代码都是模板， 可在官网下载， 主要是要设置三个东西，公钥， 私钥， 还有你的云端仓库名， 可以通过application.yml统一设置
 *              在一个就是上传之后文件存在哪的路径， 名称， 还有是哪个本地文件存储上去
 *              在一个此用例不能跑， 本人七牛云已经到期用不了。。。。。。，
 * @Author hantianbing
 * @Date 2022/12/3 11:27
 **/
public class OssFileUitls {

    private String accessKey;
    private String secretKey;
    private String bucket;


    public void setAccessKey(String accessKey) {
        this.accessKey = accessKey;
    }

    public void setSecretKey(String secretKey) {
        this.secretKey = secretKey;
    }

    public void setBucket(String bucket) {
        this.bucket = bucket;
    }

    @Test
    public void testOss() throws FileNotFoundException {
        //构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Region.autoRegion());
        cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
//...其他参数参考类注释
        UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证，然后准备上传
//        String accessKey = "your access key";
//        String secretKey = "your secret key";
//        String bucket = "your bucket name";
//默认不指定key的情况下，以文件内容的hash值作为文件名
        String key = null;
        try {
            byte[] uploadBytes = "hello qiniu cloud".getBytes("utf-8");
            ByteArrayInputStream byteInputStream=new ByteArrayInputStream(uploadBytes);
            //选择要传输的文件，可以用一个String变量来代替具体的量， 后面就可以随便传文件
            InputStream inputStream = new FileInputStream("C:\\Users\\86182\\Desktop\\0c1717cb6fylIuG.jpg");
            System.out.println(accessKey);
            System.out.println(secretKey);
            System.out.println(bucket);
            Auth auth = Auth.create(accessKey, secretKey);
            String upToken = auth.uploadToken(bucket);
            try {
                Response response = uploadManager.put(byteInputStream,key,upToken,null, null);
                System.out.println("信息"+response);
            } catch (QiniuException ex) {
                Response r = ex.response;
                System.err.println(r.toString());
                try {
                    System.err.println(r.bodyString());
                } catch (QiniuException ex2) {
                    //ignore
                }
            }
        } catch (Exception ex) {
            //ignore
        }

    }
}
